#include "pluginlist.h"
#include <QDir>

#include <QPluginLoader>


PlugInList* PlugInList::instance = new PlugInList();


PlugInList::PlugInList()
{

}

PlugInList* PlugInList::getInstance()
{
    return instance;
}

void PlugInList::loadPlugins(void)
{
    QString directory = QDir::currentPath() + "/PlugIn";  // 当前路径
    qDebug()<<directory;
    QDir dir(directory);
    dir.setFilter(QDir::Files | QDir::NoDotAndDotDot); // 设置过滤，只列出文件，不包括点（.）和点点（..）
    dir.setNameFilters(QStringList() << "*.dll"); // 设置文件名过滤，只列出dll文件

    QFileInfoList fileList = dir.entryInfoList(); // 获取文件列表
    qDebug()<<"fileList size"<<fileList.size();

    foreach(QFileInfo fileInfo, fileList)
    {
        qDebug()<<fileInfo.absoluteFilePath(); // 打印dll文件的绝对路径
        QPluginLoader loader(fileInfo.absoluteFilePath());
        QObject *plugin = loader.instance();
        if (plugin)
        {
            PlugIn_Base *myPlugin = qobject_cast<PlugIn_Base*>(plugin);
            if (myPlugin)
            {
                qDebug()<<myPlugin->GetLable();
                _PlugInlIST.append(myPlugin);
            }
        }
        else
        {
            qDebug() << "Failed to load plugin:" << loader.errorString();
        }
    }
    qDebug()<<"_PlugInlIST size"<<_PlugInlIST.size();
}

quint32 PlugInList::GetPlugInNum(void)
{
    return _PlugInlIST.size();
}

PlugIn_Base *PlugInList::GetPlug(uint8_t Index)
{
    return _PlugInlIST[Index];
}
